home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / STRINGS.SWG / 0048_Get LAST SUB in STRING.pas < prev    next >
Pascal/Delphi Source File  |  1993-09-26  |  2KB  |  71 lines

  1. {*****************************************************************************
  2.  * Function ...... Rat()
  3.  * Purpose ....... Locate the last occurance of a substring in a string
  4.  * Parameters .... sub        Substring to locate
  5.  *                 s          String to look for <sub> in
  6.  * Returns ....... Numeric last position of <sub> in s, counting from
  7.  *                 left to right.
  8.  * Notes ......... None
  9.  * Author ........ Martin Richardson
  10.  * Date .......... October 2, 1992
  11.  *****************************************************************************}
  12. FUNCTION Rat( sub: STRING; s: STRING ): BYTE; ASSEMBLER;
  13. VAR
  14.    nResult: WORD;
  15. ASM
  16.       PUSH    DS
  17.       XOR     CX, CX
  18.       XOR     BX, BX
  19.  
  20.       LDS     SI, sub
  21.       XOR     AX, AX
  22.       LODSB
  23.       XCHG    BX, AX
  24.  
  25.       CMP     BX, 0
  26.       JBE     @@3
  27.  
  28.       LES     DI, s
  29.       LODSB
  30.       MOV     DX, AX
  31.       CMP     DX, 0
  32.       JBE     @@3
  33.  
  34.       CMP     BX, DX
  35.       JAE     @@3
  36.  
  37.       DEC     BX
  38.       CLD
  39. @@1:  MOV     SI, WORD PTR sub
  40.       INC     SI
  41.       LODSB
  42.  
  43.       MOV     CX, DX
  44.       REPNE   SCASB
  45.       JNZ     @@3
  46.  
  47.       MOV     DX, CX
  48.       MOV     CX, BX
  49.       REPE    CMPSB
  50.       JZ      @@4
  51.  
  52.       ADD     DI, CX
  53.       SUB     DI, BX
  54. @@2:  CMP     DX, BX
  55.       JA      @@1
  56. @@3:  XOR     AL, AL
  57.       JMP     @@5
  58. @@4:  SUB     DI, BX
  59.       DEC     DI
  60.       SUB     DI, WORD PTR s
  61.       MOV     nResult, DI
  62.       ADD     DI, WORD PTR s
  63.       ADD     DI,CX
  64.       INC     DI
  65.       JMP     @@2
  66. @@5:
  67.       MOV     AX, nResult
  68.       POP     DS
  69. END;
  70.  
  71.